class Deposito < ActiveRecord::Base

  # Attributes
  belongs_to :caracterizacao
  validates_presence_of :caracterizacao
  attr_readonly :caracterizacao_id

  # Validation
  validates_numericality_of :ano, :only_integer => true, :in => 1900..Time.now.year
  validates_numericality_of :valor, :complementacao, :greater_than => 0

  validate :data_compativel_com_ano_apuracao, :complementacao_maior_metade_valor

  default_scope :order => :data

  def data_compativel_com_ano_apuracao
    unless (ano..ano.next).include?(data.year) && data.year <= Time.now.year
      errors.add_to_base("Data do depósito deve estar no Ano de Apuração ou no seguinte")
    end
  end

  def complementacao_maior_metade_valor
    if complementacao < round(valor / 2)
      errors.add_to_base("Complementação legal não pode ser menor que 50% do Valor do Benefício Fiscal")
    end
  end

  def total
    valor + complementacao
  end

  private

  def round(valor)
    BigDecimal.new(valor.to_s).truncate(2).to_f
  end

end
